package com.zhuzhiguang;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NumberUtil {
	
	
	private static String strVal;

	/**
	* 功能：判断是否全部为数字
	* 示例：
	* NumberUtil.isNUmber("abc") -> false
	* NumberUtil.isNUmber("5.6") -> false
	* NumberUtil.isNUmber("1234") -> true
	*/
	public static boolean isNUmber(String src){
		
	    //TODO 实现代码
		if(src==null || src.trim().length()==0)
			return false;
		
		String reg = "^(-)?[0-9]+(\\.[0-9]+)?$";
		Pattern pattern = Pattern.compile(reg);
		Matcher matcher = pattern.matcher(src);
		return matcher.matches();
		
	}
	
	
	/**
	* 功能：提供精确的加法运算。
	* 说明：0.1 + 0.2 != 0.3，而是0.30000000000000004，因此该需要做精确处理
	* @param v1 被加数
	* @param v2 加数
	* @return 两个参数的和
	*/
	public static double add(double v1, double v2){
		//TODO 实现代码
		BigDecimal decimal = new BigDecimal(Double.toString(v1));
		//得到一个结果
		BigDecimal add = decimal.add(new BigDecimal(Double.toString(v2)));
		return add.doubleValue();
	}
	
	//相减
	public static double subtract(double v1, double v2){
		//TODO 实现代码
		BigDecimal decimal = new BigDecimal(Double.toString(v1));
		//得到一个结果
		BigDecimal add = decimal.subtract(new BigDecimal(Double.toString(v2)));
		return add.doubleValue();
	}
	
	//相乘法
	public static double multi(double v1, double v2){
		//TODO 实现代码
		BigDecimal decimal = new BigDecimal(Double.toString(v1));
		//得到一个结果
		BigDecimal add = decimal.multiply(new BigDecimal(Double.toString(v2)));
		return add.doubleValue();
	}
	
	//相除法
	public static double divide(double v1, double v2,int scale){
		
		if(v2<0.0001) {
			 throw new ArithmeticException("除数太小了！");  // NaN
		}
		
		//TODO 实现代码
		BigDecimal decimal = new BigDecimal(Double.toString(v1));
		//得到一个结果
		BigDecimal add = decimal.divide(new BigDecimal(Double.toString(v2)),scale,RoundingMode.HALF_DOWN);
		return add.doubleValue();
	}
	
	/**
	 * 功能：提供精确的小数位四舍五入处理。
	 * @param double 需要四舍五入的数字
	 * @param int 小数点后保留几位
	 * @return 四舍五入后的结果
	 */
	public static double round(double v,int scale){
		//TODO 实现代码
		 // double b=20.1265;
          BigDecimal decimal = new BigDecimal(v);
         double d = decimal.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
         return d;
	}
	
	/**
	 * 功能：提供精确的小数位四舍五入处理。
	 * @param double value 金额
	 * yi'ersansiwu
	 * @return 大写金额字符串
	 *    零、壹、贰、叁、肆、伍、陆、柒、捌、玖、圆 、 拾 、佰 、仟 、万、亿、 十亿、  百亿、  、角 、分 、厘 、 毫
	 *     4 3 2 3 8 3 8 3 .3 3 4 3 4 
	 *                                拾   圆
	 *                                 
	 */
	public static String capitalAmountRMB(double value){
		//TODO 实现代码
		 String[] nujit= {"圆","拾","佰 ","仟","万","拾" ,"佰","仟","亿","十","百"};
		 String[] funit = {"角","分 ","厘"," 毫"};
		 String[] numberHanzi={"零"," 壹","贰","叁","肆","伍","陆","柒","捌","玖"};
		 
		 // 只处理4位即可
		 double val = round(value,4);
		 
		 
		 DecimalFormat df = new DecimalFormat("0.0000");
		 String strVal = df.format(val);
		 
		// 先处理整数部分
		int dotIndex = strVal.indexOf('.');
		String firstPart = strVal.substring(0, dotIndex);
		String reverse = StringUtil.reverse(firstPart);
		char[] array = reverse.toCharArray();
		String str = new String();
		// 进行字符串拼接
		for (int i = 0; i < array.length; i++) {
			if(array[i]=='0') {
				str = numberHanzi[ array[i]-'0']   + str;
			}else {
				str = numberHanzi[ array[i]-'0']  + nujit[i] + str;
			
			}
		}
		
		
		//得到小数部分
		String secondPart = strVal.substring( dotIndex+1,strVal.length()) ;
		char[] array2 = secondPart.toCharArray();
			// 进行字符串拼接
		for (int i = 0; i < array2.length; i++) {
					str = str+  numberHanzi[ array2[i]-'0']  + funit[i] ;
		}
		
		 return "￥" + str;
		 
		 
		 
		 
		 
	}
	
	
	
	

	



}
